home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / R-Shows / (c)sds.d64 / moving sprite (.txt) < prev    next >
Commodore BASIC  |  2007-02-04  |  15KB  |  175 lines

  1. 0 REM - WON'T WORK WITH BUSCARD 'ON'
  2. 1 GOTO 1000
  3. 10 REM :::::: ZAP!
  4. 11 A=256: B=2049: C=1003
  5. 12 IF PEEK(B+2) +A*PEEK(B+3)>=C THEN 15
  6. 13 B=PEEK(B)+A*PEEK(B+1): ON ABS(B<>0) GOTO 12:END
  7. 14 A=256:B=PEEK(251)+A*PEEK(252)
  8. 15 IF PEEK(B+1)=0 THEN END
  9. 16 PRINT CHR$(147)PEEK (B+2)+A*PEEK(B+3):PRINT "GOTO 14"
  10. 17 POKE 251,B-INT(B/A)*A:POKE 252,B/A
  11. 18 POKE 631,19:POKE632,13:POKE633,13:POKE198,3:END
  12. 20 REM ... GRAPHICS
  13. 21 POKE 53265,59
  14. 22 POKE 53272,29
  15. 23 POKE 56576,198
  16. 24 RETURN
  17. 30 REM ... TEXT
  18. 31 POKE 53265,27
  19. 32 POKE 53272,21
  20. 33 POKE 56576,199
  21. 34 RETURN
  22. 40 REM :::: COLOURS
  23. 41 FOR I=17408 TO 18407
  24. 42 POKE I,C
  25. 43 NEXT
  26. 44 RETURN
  27. 50 REM ::::::: PAINT BACKGROUND
  28. 51 FOR I = 24576 TO 32575
  29. 52 POKE I,0
  30. 53 NEXT I
  31. 54 RETURN
  32. 60 REM ::::::: FIND A POINT
  33. 61 ROW = INT(Y/8)
  34. 62 COL = INT(X/8)
  35. 63 LINE = Y AND 7
  36. 64 BIT = 7-(XAND7)
  37. 65 BYTE = 24576 + ROW*320 + COL*8 + LINE
  38. 66 CBYTE = 17408 + ROW * 40 + COL
  39. 67 RETURN
  40. 70 REM ::::::: PLOT A POINT
  41. 71 GOSUB 60
  42. 72 POKE BYTE,PEEK(BYTE) OR 2^BIT
  43. 73 POKE CBYTE,C
  44. 74 RETURN
  45. 80 REM :::::  PLOT A LINE
  46. 81 DX = X2 - X1: DY = Y2 - Y1
  47. 82 L=ABS(DX):IF ABS(DY)>L THEN L=ABS(DY)
  48. 83 IF L>0 THEN XI = DX/L: YI = DY/L
  49. 84 X = X1+.5:Y = Y1+.5
  50. 85 FOR I = 0 TO L
  51. 86 GOSUB 70: REM PLOT POINT
  52. 87 X=X+XI:Y=Y+YI
  53. 88 NEXT I
  54. 89 RETURN
  55. 90 REM  :::::  PAINT A SHAPE
  56. 91 PC=PC+ABS(PC=0):FOR X=X0 TO X0+W:FL$="F":PR=0
  57. 92 FOR YC=Y0TOY0+H:Y=YC:GOSUB60
  58. 93 ON ABS((PEEK(BYTE)AND 2^BIT)<>0) GOTO 97:IF PR=0 THEN 96
  59. 94 PR=0:IF FL$="F"THEN Y1=YC:FL$="T":GOTO 96
  60. 95 GOSUB 99:FL$="F"
  61. 96 NEXT YC:GOTO 98
  62. 97 PR=1:NEXT YC:IF FL$="T"THEN GOSUB 99
  63. 98 NEXT X:RETURN
  64. 99 FOR Y=Y1TOYC-1:ON ABS(RND(1)<PC)GOSUB 70:NEXT Y: RETURN
  65. 100 REM  :::::  SAVE PICTURE
  66. 101 INPUT "ENTER FILE NAME";FILE$
  67. 102 INPUT "ENTER 8 FOR DISK, OR 1 FOR CASSETTE"; DE
  68. 103 SYS 57812 FILE$ + ".PIC", DE
  69. 104 POKE 174,64:POKE 175,127:POKE 193,0:POKE 194,96
  70. 105 SYS 62954
  71. 106 SYS 57812 FILE$ + ".COL", DE
  72. 107 POKE 174,232: POKE 175,71: POKE193,0: POKE 194,68
  73. 108 SYS 62954: END
  74. 110 REM ::::: DRAW A SHAPE
  75. 111 FOR J = 0 TO NL
  76. 112 E1 = L%(0,J): E2 = L%(1,J)
  77. 113 X1 = E%(0,E1) + X0: Y1 = E%(1,E1) + Y0
  78. 114 X2 = E%(0,E2) + X0: Y2 = E%(1,E2) + Y0
  79. 115 GOSUB 80
  80. 116 NEXT J
  81. 117 RETURN
  82. 120 REM  :::::  DEFINE SPRITE SP
  83. 121 FOR I = 0 TO 62
  84. 122 READ A
  85. 123 POKE 16384 + 64*SP+I,A
  86. 124 NEXT I
  87. 125 POKE 18424 + SP,SP
  88. 126 RETURN
  89. 130 REM ::::: TURN ON SPRITE SP
  90. 131 POKE 53269, PEEK(53269)OR 2^SP
  91. 132 RETURN
  92. 140 REM ::::: TURN OFF SPRITE SP
  93. 141 POKE 53269,PEEK(53269)AND(255-2^SP)
  94. 142 RETURN
  95. 150 REM ::::: X EXPAND SPRITE SP
  96. 151 POKE 53277,PEEK(53277)OR2^SP
  97. 152 RETURN
  98. 160 REM ::::: X UNEXPAND SPRITE SP
  99. 161 POKE 53277,PEEK(53277)AND(255-2^SP)
  100. 170 REM ::::: Y EXPAND SPRITE SP
  101. 171 POKE 53271,PEEK(53271)OR 2^SP
  102. 172 RETURN
  103. 180 REM ::::: Y UNEXPAND SPRITE SP
  104. 181 POKE 53271,PEEK(53271)AND(255-2^SP)
  105. 182 RETURN
  106. 190 REM :: SPRITE SP PRIORITY OVER SHAPE
  107. 191 POKE 53275,PEEK(53275)AND(255-2^SP)
  108. 192 RETURN
  109. 200 REM :: SHAPE PRIORITY OVER SPRITE SP
  110. 201 POKE 53275,PEEK(53275)OR 2^SP
  111. 202 RETURN
  112. 210 REM ::: SET SPRITE SP TO COLOUR C
  113. 211 POKE 53287 + SP,C
  114. 212 RETURN
  115. 220 REM :: PLACE SPRITE SP AT X,Y
  116. 221 XX=X+24:YY=Y+50:Z%=XX/256
  117. 222 V=XX-Z%*256:W=53248+SP*2
  118. 223 WW=53264
  119. 224 PR=ABS((PEEK(WW)AND 2^SP)<>0)
  120. 225 VV=PEEK(WW)AND(255-2^SP)OR(2^SP*Z%)
  121. 226 IF PR<>Z%THEN GOSUB140
  122. 227 POKE W,V:POKEWW,VV: GOSUB 130
  123. 228 POKE 53249+SP*2,YY
  124. 229 RETURN
  125. 230 REM :: MOVE SPRITE FROM X1,Y1 TO X2,Y2
  126. 231 DX=X2-X1:DY=Y2-Y1
  127. 232 L=ABS(DX):IFABS(DY)>LTHENL=ABS(DY)
  128. 233 IF L>0 THEN XI=DX/L:YI=DY/L
  129. 234 X=X1+.5:Y=Y1+.5:SD=SD+ABS(SD=0)
  130. 235 FOR I=0TOLSTEPSD
  131. 236 GOSUB 220
  132. 237 X=X+XI*SD:Y=Y+YI*SD
  133. 238 NEXT I
  134. 239 RETURN
  135. 1000 REM :::::
  136. 1001 REM   MAIN ROUTINE
  137. 1002 REM :::::
  138. 1010 GOSUB 20
  139. 1100 REM ::::: SUN SPRITE
  140. 1110 SP =0:GOSUB 120
  141. 1120 GOSUB 130
  142. 1130 GOSUB 150
  143. 1140 GOSUB 170
  144. 1150 GOSUB 200
  145. 1160 C = 7:GOSUB 210
  146. 1170 X1=0:Y1=10:X2=319:Y2=10:SD=5
  147. 1180 GOSUB 230: GOTO 1180
  148. 2500 REM ::::: SUN SPRITE DATA
  149. 2510 DATA   0,  0,  0
  150. 2520 DATA   0,  0,  0
  151. 2530 DATA   1,255,128
  152. 2540 DATA   7,255,224
  153. 2550 DATA  15,255,240
  154. 2560 DATA  31,255,248
  155. 2570 DATA  63,255,252
  156. 2580 DATA 127,255,254
  157. 2590 DATA 255,255,255
  158. 2600 DATA 255,255,255
  159. 2610 DATA 255,255,255
  160. 2620 DATA 255,255,255
  161. 2630 DATA 255,255,255
  162. 2640 DATA 127,255,254
  163. 2650 DATA  63,255,252
  164. 2660 DATA  31,255,248
  165. 2670 DATA  15,255,240
  166. 2680 DATA   7,255,224
  167. 2690 DATA   1,255,128
  168. 3000 DATA   0,  0,  0
  169. 3010 DATA   0,  0,  0
  170. 6000 GETA$
  171. 6010 IF A$=" " THEN 6030
  172. 6020 GOTO 6000
  173. 6030 GOSUB 30
  174. 6040 END
  175.